package topology;
import spouts.TwitterSpout;
import backtype.storm.Config;
import backtype.storm.LocalCluster;
import backtype.storm.StormSubmitter;
import backtype.storm.generated.AlreadyAliveException;
import backtype.storm.generated.InvalidTopologyException;
import backtype.storm.topology.TopologyBuilder;
import backtype.storm.tuple.Fields;
import bolts.CassandraBolt;
import bolts.UnshortenBolt;
/**
* Orchestrates the elements and forms a topology to run the unshortening service.
*
* @author Michael Vogiatzis
*/
public class UnshortenTopology {
public static void main (String[] args) throws Exception{
TopologyBuilder builder = new TopologyBuilder();
builder.setSpout("spout", new TwitterSpout(), 1);
builder.setBolt("unshortenBolt", new UnshortenBolt(), 4)
.shuffleGrouping("spout");
builder.setBolt("dbBolt", new CassandraBolt(), 2)
.shuffleGrouping("unshortenBolt");
Config conf = new Config();
conf.setDebug(false);
//submit it to the cluster, or submit it locally
if(args!=null && args.length > 0) {
conf.setNumWorkers(3);
StormSubmitter.submitTopology(args[0], conf, builder.createTopology());
} else {
conf.setMaxTaskParallelism(10);
LocalCluster cluster = new LocalCluster();
cluster.submitTopology("unshortening", conf, builder.createTopology());
Thread.sleep(10000);
cluster.shutdown();
}
}
}